package main

import (
	"fmt"
	"unsafe"
)

func main1() {
	//布尔类型
	var a bool = false
	fmt.Println(a)
	//格式化打印
	/*
			%t 是一个占位符 标识输出bool类型的值
		    %T 标识输出数据的对应类型
	*/
	fmt.Printf("")
}

func main2() {
	//整型 基于符号 int 和 uint (unsigned int)无符号只能存储大于等于0的整型
	name := 90
	var n2 uint = 12

	fmt.Printf("%T\n", name)
	fmt.Println(n2)
}

func main3() {
	//整型 基于位 int8 int16 int32 int64
}

func main4() {
	//整型 基于进制  十进制 八进制 十六进制

	//十进制
	var a int = 123

	//八进制 （以0开头，但是最大不能超过7 比如01238 就是错误的）
	var b int = 0123

	//十六进制（以0x开头）(使用场景 内存地址  位运算)
	var c int = 0x1a

	//%d 按照十进制打印数据
	fmt.Printf("%d\n", a)
	//%o 按照八进制打印数据
	fmt.Printf("%o\n", b)
	//%x 按照十六进制打印数据
	fmt.Printf("%x\n", c)

	//%b 按照二进制打印数据
	fmt.Printf("%b\n", a)

}

func main5() {
	//浮点型
	//单精度浮点型 float32  有效位数为7位
	//双精度浮点型 float64  有效位数为15位

	//在内存中的存储 符号位 整数位 小数位

	var a float32 = 3.1415
	var b float64 = 3.1415

	//%f 表示输出一个浮点型数据
	//%.2f 表示小数点后保留两位，第三位会四舍五入
	fmt.Printf("%f\n", a)
	fmt.Printf("%.3f", b)
}

func main6() {
	//字符类型 实际为uint8  会安装uint8类型打印
	var ch byte = 'q'
	//ASCII码值
	//0-31 控制字符 使用转义字符表示内容

	//%c 按照字打印输出
	fmt.Printf("%c\n", ch)

	//rune字符类型 实际为int32 会按照int32类型打印
	var ch1 rune = '中'
	fmt.Printf("%c\n", ch1)
}

func main() {
	//字符串
	var str string = "hello world"
	fmt.Printf("%s\n", str)

	str1 := "hello"
	str2 := "world"
	//使用+运算符 连接两个字符串
	fmt.Println(str1 + str2)
	//使用==运算符 判断字符串相等
	fmt.Println(str1 == str2)
	//计算字符串中字符的个数 一个中文汉字 占3个字符
	fmt.Println(len(str))

	//计算一个字符串在内存中占用的字符大小
	fmt.Println(unsafe.Sizeof(str))
}
